<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>基于时间的数据 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/time-based.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/time-based.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/time-based.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/time-based.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="modeling-your-data.html">数据建模</a></span>
»
<span class="breadcrumb-link"><a href="scale.html">扩容设计</a></span>
»
<span class="breadcrumb-node">基于时间的数据</span>
</div>
<div class="navheader">
<span class="prev">
<a href="multiple-indices.html">« 多索引</a>
</span>
<span class="next">
<a href="index-templates.html">索引模板 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="time-based"></a>基于时间的数据 (Time-Based Data)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/45_Index_per_timeframe.asciidoc">edit</a>
</h2>
</div></div></div>
<p>Elasticsearch 的常用案例之一便是日志记录，
它实在太常见了以至于 Elasticsearch 提供了一个集成的日志平台叫做<em>ELK stack</em> — Elasticsearch，Logstash，以及 Kibana —— 来让这项工作变得简单。</p>
<p><a href="https://www.elastic.co/guide/en/logstash/current/index.html" class="ulink" target="_top">Logstash</a>采集、解析日志并在将它们写入Elasticsearch之前格式化。
Elasticsearch 扮演了一个集中式的日志服务角色，
<a href="https://www.elastic.co/guide/en/kibana/current/index.html" class="ulink" target="_top">Kibana</a> 是一个 图形化前端可以很容易地实时查询以及可视化你的网络变化。</p>

<p>搜索引擎中大多数使用场景都是增长缓慢、相对稳定的文档集合。搜索只是去查找最相关的文档，而不关心它们是何时创建的。</p>

<p>日志 —— 以及其他基于时间的数据流例如社交网络活动 —— 实际上有很大不同。 索引中文档数量迅速增长，通常随时间而加快。
文档几乎不会更新，基本以最近文档为搜索目标。随着时间推移，文档逐渐失去价值。</p>

<p>我们需要调整索引设计使其能够工作于这种基于时间的数据流。</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="index-per-timeframe"></a>按时间范围索引 (Index per Time Frame)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/45_Index_per_timeframe.asciidoc">edit</a>
</h3>
</div></div></div>
<p>如果我们为此种类型的文档建立一个超大索引，我们可能会很快耗尽存储空间。日志事件会不断的进来，不会停顿也不会中断。
我们可以使用 <a class="xref" href="scroll.html" title="游标查询 Scroll"><code class="literal">scroll</code></a> 查询和批量删除来删除旧的事件。但这种方法 <em>非常低效</em> 。当你删除一个文档，它只会被 <em>标记</em> 为被删除（参见 <a class="xref" href="dynamic-indices.html#deletes-and-updates" title="删除和更新">删除和更新</a>）。
在包含它的段被合并之前不会被物理删除。</p>

<p>替代方案是，我们使用一个 <em>时间范围索引</em>。你可以着手于一个按年的索引 (<code class="word">logs_2014</code>) 或按月的索引 (<code class="word">logs_2014-10</code>) 。
也许当你的网页变得十分繁忙时，你需要切换到一个按天的索引 (<code class="word">logs_2014-10-24</code>) 。删除旧数据十分简单：只需要删除旧的索引。</p>

<p>这种方法有这样的优点，允许你在需要的时候进行扩容。你不需要预先做任何艰难的决定。每天都是一个新的机会来调整你的索引时间范围以适应当前需求。
应用相同的逻辑到决定每个索引的大小上。起初也许你需要的仅仅是每周一个主分片。过一阵子，也许你需要每天五个主分片。这都不重要 —— 你可以随时调整以适应新的状况。</p>

<p>别名可以帮助我们更加透明地在索引间切换。 当创建索引时，你可以将<code class="word">logs_current</code>指向当前索引来接收新的日志事件，
当检索时，更新<code class="word">last_3_months</code>指向前三个月的所有索引：</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">POST /_aliases
{
  "actions": [
    { "add":    { "alias": "logs_current",  "index": "logs_2014-10" }}, <a id="CO290-1"></a><i class="conum" data-value="1"></i>
    { "remove": { "alias": "logs_current",  "index": "logs_2014-09" }}, <a id="CO290-2"></a><i class="conum" data-value="1"></i>
    { "add":    { "alias": "last_3_months", "index": "logs_2014-10" }}, <a id="CO290-3"></a><i class="conum" data-value="2"></i>
    { "remove": { "alias": "last_3_months", "index": "logs_2014-07" }}  <a id="CO290-4"></a><i class="conum" data-value="2"></i>
  ]
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO290-1"><i class="conum" data-value="1"></i></a><a href="#CO290-2"></a></p>
</td>
<td align="left" valign="top">
<p>将 <code class="word">logs_current</code> 由九月切换至十月。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO290-3"><i class="conum" data-value="2"></i></a><a href="#CO290-4"></a></p>
</td>
<td align="left" valign="top">
<p>将十月添加到 <code class="word">last_3_months</code> 并且删掉七月。</p>
</td>
</tr>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="multiple-indices.html">« 多索引</a>
</span>
<span class="next">
<a href="index-templates.html">索引模板 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>